package com.zking.dao;

import com.zking.dao.ProductDao;
import com.zking.dao.ShopCarDao;
import com.zking.entity.Product;
import com.zking.entity.ShopCar;
import com.zking.util.DBUtil;

import java.util.List;

public class ShopCarDao {
    public static boolean addProduct(String eu_user_id, int ep_id) {
        //完善，添加商品到购物车之前，先判断是否添加过来
        //如果该用户之前没有添加过这个商品--直接插入一条数据即可
        //如果该用户之前添加过来--更新商品的数量即可
        boolean flag = isExistProduct(eu_user_id, ep_id);
        if(flag){//添加过--修改
            String sql = "update shopcar set count=count+1 where eu_user_id=? and ep_id=?";
            return DBUtil.update(sql,eu_user_id,ep_id);
        }else{//没有添加过--新增
            String sql = "insert into shopcar values(?,?,1)";
            return DBUtil.update(sql,eu_user_id,ep_id);
        }
    }

    public static boolean isExistProduct(String eu_user_id, int ep_id) {
        String sql = "select * from shopcar where eu_user_id=? and ep_id=?";
        List<ShopCar> list = DBUtil.query(sql, ShopCar.class, eu_user_id, ep_id);
        if(list.size()==1){
            return true;
        }
        return false;
    }

    public static List<ShopCar> selectShopCarById(String eu_user_id) {
        String sql = "select * from shopcar where eu_user_id=?";
        return DBUtil.query(sql, ShopCar.class,eu_user_id);
    }

    public static Integer updateShopCar(String eu_user_id, int ep_id, boolean flag) {
        //先得到当前这个商品的库存的数量
        int count=1;//购买的数量 默认为1
        String sql = "select * from shopcar  where eu_user_id=? and ep_id=?";
        List<ShopCar> list = DBUtil.query(sql, ShopCar.class, eu_user_id, ep_id);
        if(list.size()==1){
            count = list.get(0).getCount();
        }

        //默认+1
        sql = "update shopcar set count=count+1 where eu_user_id=? and ep_id=?";
        if(flag==false){//-1
            //完善最少要买1个
            if(count>1){
                sql = "update shopcar set count=count-1 where eu_user_id=? and ep_id=?";
            }else{//直接结束
                System.out.println("最少给个面子买一个！");
                return 1;
            }
        }else{//+1   完善不能超过库存
            //先得到当前这个商品在库存
            Product product = ProductDao.selectProductById(ep_id);
            if(count>=product.getEp_stock()){//要购买的数量已经达到了库存的最大值
                System.out.println("已经到达商品库存的最大值！");
                return count;
            }
        }
        DBUtil.update(sql,eu_user_id,ep_id);

        sql = "select * from shopcar where eu_user_id=? and ep_id=?";
        list = DBUtil.query(sql, ShopCar.class, eu_user_id, ep_id);
        if(list.size()==1){
            return list.get(0).getCount();
        }
        return 1;
        //实际开发中，可能存在一个异常情况：
        //商品1的库存有10,
        //用户1添加商品1购物车6
        //用户2添加商品1购物车6
        //此时，如果用户1进行结算，商品1的库存只有4个，用户2结算时商品1的库存不够，结算异常
        //解决方案：
        //用户1结算时：生成订单表，生成订单详情表，更新商品表中商品的库存--常规结算流程
        //用商品1到购物车表中查询出购买的数量如果大于库存时，把购买数量修改为库存
        //建议你使用触发器解决该问题：--优点不用写java完成复杂的业务逻辑，确定影响数据库的性能
        //在商品表的数据发生改变之后，得到当前要修改的商品表中商品的库存的最新的数量
        //根据这个商品的编号和最新的数量到购物车表中修改购买数量大于库存的值为库存值（这样就可以保证购买的数量不会超过库存）

    }

    public static boolean deleteShopCar(String eu_user_id, int ep_id) {
        String sql = "delete from shopcar where eu_user_id=? and ep_id=?";
        return DBUtil.update(sql,eu_user_id,ep_id);
    }

    public static boolean deleteShopCarByProductId(int ep_id){
        String sql = "delete from shopcar where ep_id=?";
        return DBUtil.update(sql, ep_id);
    }
}
